package com.wf.classRoomTest;

/**
 * @author mpk16
 */
public class HashSetSimulation {
    private static final int DEFAULT_CAPACITY = 16; // 默认容量
    private Object[] table; // 内部数组
    private int size; // HashSet中元素的数量

    public HashSetSimulation() {
        table = new Object[DEFAULT_CAPACITY];
        size = 0;
    }

    public void add(Object obj) {
        int index = hash(obj.hashCode()); // 计算索引位置
        System.out.println(index);
        if (table[index] == null) { // 如果索引位置为空，则直接插入
            table[index] = obj;
            size++;
        } else {
            // 处理哈希冲突，这里简化为不处理冲突的情况
            // 实际中，可以采用链地址法或开放地址法来解决冲突
            System.out.println("哈希冲突index: " + index);
        }
    }

    private int hash(int hashCode) {
        return (hashCode ^ (hashCode >>> 16)) & (table.length - 1);
    }

    public static void main(String[] args) {
        HashSetSimulation set = new HashSetSimulation();
        set.add("apple");
        set.add("banana");
        set.add("orange");
        set.add("xvxvb");
        set.add("tewtt");
        set.add("12345");
        set.add("fgsgfa");
        set.add("23123");
        set.add("vbxxvbvb");
        set.add("sdfsdff");
        set.add("jkjkty");
        set.add("mmghmmjgh");

        // 遍历查看元素及其对应的索引位置
        for (int i = 0; i < set.table.length; i++) {
            Object obj = set.table[i];
            System.out.println("Index " + i + ": " + (obj != null ? obj.toString() : "null"));
        }
    }
}
